package com.xb.loan.usercenter.user.dict.service.impl;

import com.xb.loan.log.exception.BizException;
import com.xb.loan.usercenter.service.dict.IDictEnumService;
import com.xb.loan.usercenter.service.dict.bean.DictEnumVO;
import com.xb.loan.usercenter.user.dict.dao.DictEnumDao;
import com.xb.loan.usercenter.user.dict.dao.bean.DictEnum;
import com.xb.loan.util.cache.DefaultCacheFactory;
import com.xb.loan.util.common.ObjectOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("dictEnumService")
public class DictEnumServiceImpl implements IDictEnumService {

    @Autowired
    DictEnumDao dictEnumDao;
  
    @Override
    public List<DictEnumVO> queryDictEnumByType(String enumType) throws BizException {
        List<DictEnumVO> list =  DefaultCacheFactory.getFacotry().getCache().getBeans(DictEnumVO.class);

        if (list == null || list.isEmpty()) {
            list = ObjectOperation.convertByClassesList(dictEnumDao.selectByType(enumType), DictEnumVO.class);
            if (list!=null && list.size()>0) {
                for(DictEnumVO devo : list){
                    DefaultCacheFactory.getFacotry().getCache().setBean(DictEnumVO.class,enumType+devo.getEnumCode(),devo);
                }
            }
        }else{
            List<DictEnumVO> deList=new ArrayList<DictEnumVO>();
            for(DictEnumVO de:list){
                if(enumType.equals(de.getEnumType())){
                    deList.add(de);
                }
            }
            if(deList ==null || deList.isEmpty() ){
                list = ObjectOperation.convertByClassesList(dictEnumDao.selectByType(enumType), DictEnumVO.class);
                if (list!=null && list.size()>0) {
                    for(DictEnumVO devo : list){
                        DefaultCacheFactory.getFacotry().getCache().setBean(DictEnumVO.class,enumType+devo.getEnumCode(),devo);
                    }
                }
                return list;
            }
            return deList;
        }
        return list;
    }


    @Override
    public DictEnumVO queryDictEnumByTypeAndCode(String enumType, String enumCode) throws BizException {
        DictEnumVO dictEnumVO =  DefaultCacheFactory.getFacotry().getCache().getBean(DictEnumVO.class,enumType+enumCode);

        if (dictEnumVO == null) {
            Map<String,String> map = new HashMap<String,String>();
            map.put("enumType", enumType);
            map.put("enumCode", enumCode);
            
            dictEnumVO = ObjectOperation.convertByClasses(dictEnumDao.selectByTypeAndCode(map), DictEnumVO.class);
            if (dictEnumVO != null ) {
                   DefaultCacheFactory.getFacotry().getCache().setBean(DictEnumVO.class, 
                           dictEnumVO.getEnumType()+dictEnumVO.getEnumCode(), dictEnumVO);
            }
        }
        return dictEnumVO;
    }


    /**
     * //TODO 添加override说明
     * @see com.palm.plat.usercenter.dict.service.DictEnumService#insertDictEnum(com.palm.plat.usercenter.dict.service.bean.DictEnumVO)
     **/
    @Override
    public int insertDictEnum(DictEnumVO dictEnumVO) throws BizException {        
        DictEnum dictEnum = ObjectOperation.convertByClasses(dictEnumVO, DictEnum.class);
        if(dictEnumDao.insertSelective(dictEnum) > 0){
            DefaultCacheFactory.getFacotry().getCache().setBean(DictEnumVO.class, 
                    dictEnumVO.getEnumType()+dictEnumVO.getEnumCode(), dictEnumVO);          
            return 1;
        }
        return 0;
    }


    /**
     * //TODO 添加override说明
     * @see com.palm.plat.usercenter.dict.service.DictEnumService#deleteByTypeAndCode(java.lang.String, java.lang.String)
     **/
    @Override
    public int deleteByTypeAndCode(String enumType, String enumCode) throws BizException {
        Map<String,String> map = new HashMap<String,String>();
        map.put("enumType", enumType);
        map.put("enumCode", enumCode);
        
        DictEnum dictEnum = dictEnumDao.selectByTypeAndCode(map);        
        if(dictEnum != null){
            if(dictEnumDao.deleteByTypeAndCode(map) > 0){
                DefaultCacheFactory.getFacotry().getCache().removeBean(DictEnumVO.class, enumType+enumCode);
                return 1;
            }
        }        
        return 0;
    }

}
